package com.yupfeg.livedata

import androidx.annotation.MainThread

/**
 * 单次执行事件允许写入与操作的`LiveData`
 * * 可携带对应订阅者的状态
 * * 通常用于`ViewModel`来进行赋值操作
 * @author yuPFeG
 * @date 2020/12/17
 */
@Suppress("unused")
class MutableStateLiveData<T> : StateLiveData<T>(){

    /**
     * 设置liveData所持有状态为【数据出现异常】状态
     * * 通知所有订阅者
     * @param message 错误提示消息
     * */
    fun setErrorStatus(message : String? = ""){
        dispatchingProcessStatus(LiveDataState.error(message ?: ""))
    }

    /**
     * 重置liveData持有状态为【初始化】状态
     * * 通知所有订阅者
     * */
    fun resetState(){
        dispatchingProcessStatus(LiveDataState.start())
    }

    /**
     * 设置LiveData数据
     * @param value
     */
    @MainThread
    public override fun setValue(value: T?) {
        super.setValue(value)
    }

    /**
     * 允许在子线程设置LiveData的值
     * */
    public override fun postValue(value: T?) {
        value?.also {
            super.postValue(value)
        }
    }

    /**
     * 手动回收当前事件内容
     * */
    @MainThread
    fun releaseEvent() {
        this.value = null
    }

}